// 取得当前站点配置
chrome.extension.sendRequest({'action' : 'getSite'}, function(site){
	eval('var site = ' + site + ';');
	//清理页面
	site.clean();
	$(document.body).html('<div id="q3_all_chap"></div>');
	// 更新css
	chrome.extension.sendRequest({'action' : 'updateCss'});
	
	// Helper
	var Helper = {
		// 当前章节对象
		nowChapter : null,
		// 下一章对象
		nextChapter : null,
		// 设置当前章
		setNowChapter : function(chapter) {
			Helper.nowChapter = chapter;
			// 绘制新的当前页
			Helper.nowChapter.draw();
			// 载入下一页
			if (!chapter.last && !chapter.nextVip) {
				Helper.nextChapter = new Chapter(Helper.nowChapter.nextUrl);
			}
		},
		// 滚屏事件处理
		scrollListener : function() {
			// 卷屏判断
			if ((document.body.scrollHeight - document.body.scrollTop  -  window.innerHeight) < site.drawTriggerHeight) {
				// 绘制下一页
				if (Helper.nowChapter.loadOk && !Helper.nowChapter.last && !Helper.nowChapter.nextVip && Helper.nextChapter && Helper.nextChapter.loadOk) {
					// 将当前页对象替换为下一页对象
					Helper.setNowChapter(Helper.nextChapter);
				// 绘制最后一页提示
				} else if (Helper.nowChapter.last) {
					Helper.nowChapter.drawLast();
					Helper.cleanScrollListener();
				// 绘制最后公众章节提示
				} else if (Helper.nowChapter.nextVip) {
					Helper.nowChapter.drawVip();
					Helper.cleanScrollListener();
				} 
			}
		},
		setScrollListener : function(){
			$(document).scroll(Helper.scrollListener);
		},
		cleanScrollListener : function() {
			$(document).unbind('scroll', Helper.scrollListener);
		},
		// 分析器
		parser : function(str, rules, obj) {
			if (str && str != '' && rules) {
				for (key in rules) {
					var rule = rules[key];
					if (rule) {
						if (rule.constructor.toString().indexOf('Function') >= 0) {
							obj[key] = rule(str);
						} else {
							var match = str.match(rule);
							if (match) {
								obj[key] = match.length > 1 ? match[1] : true;
							}
						}
					}
				}
			}
		},
		// 字符串模板渲染
		renderStr : function(str, bind) {
			if (str && bind) {
				for (key in bind) {
					if (bind[key]) {
						var type = typeof(bind[key]);
						if (type == 'string' || type == 'number') {
							str = str.replace(new RegExp('\\$\\{' + key + '\\}\\$', 'ig'), bind[key]);
						}
					}
				}
			}
			return str;
		},
		// 文件模板渲染
		renderFile : function (file, bind, callback) {
			chrome.extension.sendRequest({
				'action' : 'tplRender',
				'file' : file,
				'bind' : bind
			}, callback);
		},
		// 章节解析后处理
		parserFix: function(chapter){
			// 处理site定义中的parserFix
			var bind = chapter.getAll();
			for (key in site.parserFixRender) {
				chapter[key] = Helper.renderStr(site.parserFixRender[key], bind);
			}
			// 章节正文内容的换行替换
			chapter.content = '<p>' + chapter.content.replace(/\n/g, "</p>\n<p>") + '</p>';
			// 最后一页
			if (chapter.last) {
				chapter.prevUrl = chapter.listUrl;
			}
			// 第一页
			if (chapter.first) {
				chapter.prevUrl = chapter.listUrl;
			}
			// 最后公众章节
			if (chapter.nextVip) {
				chapter.nextUrl = chapter.listUrl;
			}
		},

		'__end' : null
	}
	// 章节对象
	var Chapter = function (url, callback){
		var chap = {
			'bookId' : null,
			'chapterId' : null,
			'pageId' : null,
			'prevId' : null,
			'nextId' : null,

			'content' : null,
			'bookName' : null,
			'chapterName' : null,
			'authorName' : null,
			
			'bookUrl' : null,
			'chapterUrl' : null,
			'pageUrl' : null,
			'prevUrl' : null,
			'nextUrl' : null,


			'first' : false,
			'last' : false,
			'nextVip' : false,
			'loadOk' : false,

			// 取得所有属性
			getAll : function() {
				var obj = {};
				for (key in this) {
					if (typeof(this[key]) != 'function') {
						obj[key] = this[key];
					}
				}
				return obj;
			},
			// 绘制章节
			draw : function () {
				var bind = this.getAll();
				// 解析章节模板
				Helper.renderFile('chap.html', bind, function(html){
					$('#q3_all_chap').append(html);
				});
			},
			// 绘制最后一页信息
			drawLast : function() {
				Helper.renderFile('over.html', Helper.nowChapter.getAll(), function(html) {
					$('#q3_all_chap').append(html);
				});
			},
			// 绘制最后公众章节信息
			drawVip: function() {
				console.log(Helper.nowChapter.getAll());
				Helper.renderFile('vip.html', Helper.nowChapter.getAll(), function(html) {
					console.log(html);
					$('#q3_all_chap').append(html);
				});
			},

			'__end' : null
		}
		// url解析
		Helper.parser(url, site.urlParser, chap);
		// 取页面
		chrome.extension.sendRequest({'action' : 'httpGet', 'url' : url, 'charset' : site.charset}, function(page){
			// 页面内容解析
			Helper.parser(page, site.pageParser, chap);
			// 需要二次http请求
			if (site.httpGet) {
				var http = site.httpGet;
				// 二次http url解析来源类型
				var res;
				if (http.res == 'page' ) {
					res = page;
				} else if (http.res == 'url') {
					res = url;
				}
				// 解析url
				var match = res.match(http.reg);
				if (match) {
					// 发起二次http请求
					chrome.extension.sendRequest({'action' : 'httpGet', 'url' : match[1], 'charset' : site.charset}, function(subpage){
						// 内容解析
						Helper.parser(subpage, http.pageParser, chap);
						// 处理parserFix
						Helper.parserFix(chap);

						chap.loadOk = true;
						if (callback) {
							callback(chap);
						}
					});
				}
			} else {
				// 处理parserFix
				Helper.parserFix(chap);
				chap.loadOk = true;
				if (callback) {
					callback(chap);
				}
			}
		});
		return chap;
	}

	// 载入并解析当前页面
	new Chapter(location.href, function(chapter){
		Helper.setNowChapter(chapter);
		Helper.setScrollListener();
	})
});
